/*
 * Transcript_AbeLincoln.h
 *
 *  Created on: Apr 19, 2012
 *      Author: desilva
 */

#ifndef Transcript_AbeLincoln_H_
#define Transcript_AbeLincoln_H_

#include "TranscriptParser.h"

/**
 * A specific student's data.  See {@link TranscriptParser.h} for the most
 * up-to-date descriptions of the methods.
 */
class Transcript_AbeLincoln : public TranscriptParser
{
public:
    Transcript_AbeLincoln();
    virtual ~Transcript_AbeLincoln();

    /**
     * Gets the student's name.
     * @return  a vector of name strings for the student.  The last position is
     *      the last name (surname or family name) of the student while the
     *      first position is the first name of the student.
     */
    void getStudentName(std::vector<std::string>* name);

    /**
     * Gets the student's ID number.
     * @return  the id number of the student as a string.
     */
    std::string getStudentId();

    /**
     * Gets the string representing which program the student belongs to.
     * <br />
     * <i>Example:</i> College of Sci &amp; Engineering
     * @return  the name of the program the student is in.
     */
    std::string getDegreeProgram();

    /**
     * Gets the string representing which plan the student belongs to.
     * <br />
     * <i>Examples:</i>
     * <ul>
     *      <li>Computer Science Ph D Major</li>
     *      <li>Computer Science M S Major</li>
     * </ul>
     * @return  the name of the plan the student is in.
     */
    std::string getDegreePlan();

    /**
     * Gets the name of the degree the student is seeking.
     * <br />
     * <i>Examples:</i>
     * <ul>
     *      <li>Master of Science</li>
     *      <li>Doctor of Philosophy</li>
     * </ul>
     * @return  the name of the degree the student is seeking.
     */
    std::string getDegreeName();

    /**
     * Gets the name of the name of the student's advisor.
     * <br />
     * <i>Examples:</i>
     * <ul>
     *      <li>Meyer,Gary</li>
     *      <li>Interrante,Victoria L</li>
     *      <li>Heimdahl,Mats P E</li>
     * </ul>
     * @return  the name of the student's advisor.
     */
    std::string getDegreeAdvisor();

    /**
     * Get a list of courses that the student has taken or is enrolled in.
     * @return  courseList  a list of courses that the student has taken
     */
    void getCourses(std::vector<Course>* courseList);


    //-------------------------------------------------------------------------
    //From PeopleSoft (UMReports)
    //------------------------------------------------------------------------
    /**
     * Gets the date the student was admitted to the degree program.
     * @return  the date the student was admitted in the form yyyymmdd
     */
    std::string getDegreeAdmissionDate();

    /**
     * Gets the term and year the student started the degree program.
     * @return  the term and year the student started the program as a pair.
     *      The first element is the term and the second is the semester.
     */
    std::pair<std::string, std::string> getDegreeStartSemester();


    /**
     * Gets a list of all the committee members from the computer science
     * departmental database.
     * @return  a list of all of the committee members for the student.
     */
    std::vector<std::string> getCommitteMembers();


    //-------------------------------------------------------------------------
    //From Departmental Database
    //------------------------------------------------------------------------
    /**
     * Gets the current status of the degree program form.
     * @return  the status of the degree program form and the date the status
     *      was applied (the second item in the pair).  The date is in the form
     *      yyyymmdd.
     */
    std::pair<DegreeProgramFormStatus, std::string>
        getDegreeProgramFormStatus();


    /**
     * Gets the information about the plan the student is following.
     * @return  which plan the CS student is working to complete.
     */
    Plan getPlanInfo();
};

#endif /* Transcript_AbeLincoln_H_ */
